//
//  HMTextView+Extension.swift
//  Weibo
//
//  Created by Apple on 2017/7/17.
//  Copyright © 2017年 KY. All rights reserved.
//

import UIKit

extension HMTextView {
    //  获取富文本对应的字符串
    var emoticonText: String {
        var result = ""
        //  遍历富文本获取微博内容字符串
        self.attributedText.enumerateAttributes(in: NSMakeRange(0, self.attributedText.length), options: []) { (info, range, _) in
            if let attachment = info["NSAttachment"] as? HMTextAttachment {
                //  表情富文本
                let emoticon = attachment.emoticon!
                let chs = emoticon.chs!
                result += chs
            } else {
                //  普通字符串富文本
                let subAttributeText = self.attributedText.attributedSubstring(from: range)
                //  获取字符串富文本对应的字符串
                let text = subAttributeText.string
                result += text
            }
        }
        return result
    }
    
    //  插入表情富文本或者字符串
    func insertEmoticon(emoticon: HMEmoticon) {
        if emoticon.type == "0" {
            //  图片表情
            //  图片转富文本
            //  记录上次的富文本
            let lastAttributedStr = NSMutableAttributedString(attributedString: self.attributedText)
//            //  1. 创建图片对象
//            let image = UIImage(named: emoticon.path!, in: emoticonBundle, compatibleWith: nil)!
//            //  2. 创建文本附件
//            let attachment = HMTextAttachment()
//            //  绑定模型
//            attachment.emoticon = emoticon
//            //  3. 设置文本附件对应的图片
//            attachment.image = image
//            //  获取文字高度
//            let lineHeight = self.font!.lineHeight
//            //  设置bounds
//            attachment.bounds = CGRect(x: 0, y: -3.5, width: lineHeight, height: lineHeight)
//            //  4. 根据文本附件创建富文本
//            let attributedText = NSAttributedString(attachment: attachment)
            let attributedText = NSAttributedString.attributedStringWithEmoticon(emoticon: emoticon, font: self.font!)
            //            lastAttributedStr.append(attributedText)
            //  获取选中的范围
            var range = self.selectedRange
            //  替换选中范围的富文本
            lastAttributedStr.replaceCharacters(in: range, with: attributedText)
            
            //  设置富文本的字体大小
            lastAttributedStr.addAttribute(NSFontAttributeName, value: self.font!, range: NSMakeRange(0, lastAttributedStr.length))
            //  5. 设置富文本
            self.attributedText = lastAttributedStr
            //  点击一个表情光标位置加一，让其表情的后面
            range.location += 1
            range.length = 0
            //  设置光标位置
            self.selectedRange = range
            
            //  插入富文本的时候不会自动触发文字改变的通知和代理方法
            //  手动发送文字改变的通知和代理方法
            NotificationCenter.default.post(name: NSNotification.Name.UITextViewTextDidChange, object: nil)
            self.delegate?.textViewDidChange?(self)
            
        } else {
            //  emoji表情
            let emoji = (emoticon.code! as NSString).emoji()
            self.insertText(emoji!)
        }
    }
}
